package vistas;

//345678901234567890123456789012345678901234567890123456789012345678901234567890

import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import controladores.*;

public class Lienzo extends Canvas implements KeyListener {

	//referencia al controlador
	private CtrlCompetencia ctrlCompetencia;
	
	//coleccion de obj q generan el render
	private java.util.List<IRenderizable> renderizables;
	
	//utilizados en el doble buffer
	private Graphics dbg;
    private Image dbImage = null;
    
    //
    private int alto;
    private int ancho;
    
	public Lienzo (int anchoLienzo, int altoLienzo
			, CtrlCompetencia ctrlCompetencia) {
		
		alto = altoLienzo;
		ancho = anchoLienzo;
		this.ctrlCompetencia = ctrlCompetencia;
		
		setSize(new Dimension(anchoLienzo, altoLienzo));
		
		addKeyListener(this);
		
		renderizables = new java.util.ArrayList<IRenderizable>();
		
	}
	
	public void addGenRender(IRenderizable nRender) {
		
		renderizables.add(nRender);
		
	}
	
	public void render() {
		
		if (dbImage == null){
	        dbImage = createImage(ancho, alto);
	       	dbg = dbImage.getGraphics();
	     }

	      //limpia el background
	      dbg.setColor(Color.GRAY);
	      dbg.fillRect (0, 0, ancho, alto);

	      //renderiza en orden (una especie de z index)
	      for(IRenderizable renderizable : renderizables) {
		
	    	  renderizable.render(dbg);
	      
	      }
	      
	      repaint();
	      
	}
	
	public void paint(Graphics g) {
		
	    if (dbImage != null)
	    	g.drawImage(dbImage, 0, 0, null);
	    
	}
	
	public void keyTyped(KeyEvent evento) { }
	
	public void keyReleased( KeyEvent evento ) { }
    
    public void keyPressed( KeyEvent evento ) {
    	
    	//se lo comunica al ctrl correspondiente
    	ctrlCompetencia.teclaPulsada(evento.getKeyCode());
    	
    }
    
    public int getAncho() {
    	
    	return ancho;
    	
    }
    
    public int getAlto() {
    	
    	return alto;
    	
    }

}
